﻿using System;
using System.ComponentModel;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Kaesoft.Hospedaje.Entities;
using Kaesoft.Hospedaje.Proxy.DatosReglasReference;

namespace Kaesoft.Hospedaje.Proxy
{
    public class ProxyDatosReglas
    {
        #region Campos Privados
        private static ServicioDatosReglasClient _clientStatic;
        #endregion

        #region Constructores
        /// <summary>
        /// Crea una instancia del proxy
        /// </summary>
        static ProxyDatosReglas()
        {
            _clientStatic = new ServicioDatosReglasClient(EndpointNames.EndpointServicioDatosReglas);
            _clientStatic.Endpoint.Behaviors.Add(new CustomInspectorBehavior());
            WcfProxyInvoker.UsuarioLogged += (o, e) => RefrescarCredenciales();
            WcfProxyInvoker.GrabarCredenciales(_clientStatic.ClientCredentials);
        }

        /// <summary>
        /// Crea una instancia del proxy
        /// </summary>
        public ProxyDatosReglas()
        {
            WcfProxyInvoker.DatosReglasProxy = this;
            //Set client credentials for DMZ
            WcfProxyInvoker.UsuarioLogged += (o, e) => WcfProxyInvoker.GrabarCredenciales(_clientStatic.ClientCredentials);
            WcfProxyInvoker.GrabarCredenciales(_clientStatic.ClientCredentials);
        }

        public static void RefrescarCredenciales()
        {
            _clientStatic = new ServicioDatosReglasClient(EndpointNames.EndpointServicioDatosReglas);
            _clientStatic.Endpoint.Behaviors.Add(new CustomInspectorBehavior());
            WcfProxyInvoker.GrabarCredenciales(_clientStatic.ClientCredentials);
        }

        #region Metodos Publicos
        public static void ObtenerServiciosAsync(Action<ObtenerServiciosCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerServiciosAsync", method);
        }
        public static void ObtenerHabitacionesAsync(Action<ObtenerHabitacionesCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerHabitacionesAsync", method);
        }
        public static void ObtenerHabitacionAsync(int idHabitacion, Action<ObtenerHabitacionCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerHabitacionAsync", idHabitacion, method);
        }
        public static void ObtenerHabitacionesPaginadoAsync(int tipoConsulta, string criterio, int indice, Action<ObtenerHabitacionesPaginadoCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerHabitacionesPaginadoAsync", tipoConsulta, criterio, indice, method);
        }
        public static void GuardarHabitacionAsync(Habitacion habitacion, Action<AsyncCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "GuardarHabitacionAsync", habitacion, method);
        }
        #endregion
        #endregion
    }
}
